Em Ruby, a herança não é apenas sobre compartilhar métodos; é sobre o evolução do estado. Quando criamos uma subclasse como KaraokeSong < Song, estabelecemos uma relação "é-um" onde o filho herda a estrutura do pai enquanto refina sua identidade.
1. A Cadeia de Inicialização
O super palavra-chave é a ponte entre as gerações. Dentro initialize, chamando super passa os argumentos para o construtor do pai, garantindo que as variáveis de instância básicas (@name, @artista) são definidas antes que a subclasse adicione seu estado específico (@letras).
2. Augmentação de Método
Sobrescrever um método como to_s nos permite estender o comportamento. Ao chamar super dentro da nova definição, capturamos a saída de string do pai e simplesmente anexamos os novos dados da subclasse, mantendo um caminho evolutivo limpo.